﻿using KonyvKolcsonzes;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Konyvkolcsonzo
{
    struct kolcson
    {
        public long id;
        public long felID;
        public string nev;
        public long konyvID;
        public string cim;
        public string datum;
    }
    class Kikolcsonozve : DAL
    {
        public List<kolcson> getKikolcsonozve(string keresoBetu)
        {
            openConnection();
            string error = "";
            SqlDataReader reader = executeReader("select KolcsonID, Kikolcsonozve.FelhasznaloID AS IDf, "
                + "FelhasznaloNev, Cim, Kikolcsonozve.PeldanyID AS IDp, Datum  "
                + "from  Kikolcsonozve, Konyvek, Felhasznalok, Peldany "
                + "  where Kikolcsonozve.FelhasznaloID = Felhasznalok.FelhasznaloID "
                + "AND Peldany.PeldanyID = Kikolcsonozve.PeldanyID AND Peldany.KonyvID = Konyvek.KonyvID "
                + "AND (Cim like '%" + keresoBetu + "%' OR FelhasznaloNev like '%" + keresoBetu + "%')", ref error);
            List<kolcson> nevsor = new List<kolcson>();
            while (reader.Read())
            {
                kolcson k;
                k.id = Convert.ToInt32(reader["KolcsonID"]);
                k.felID = Convert.ToInt32(reader["IDf"]);
                k.nev = Convert.ToString(reader["FelhasznaloNev"]);
                k.konyvID = Convert.ToInt32(reader["IDp"]);
                k.cim = Convert.ToString(reader["Cim"]);
                k.datum = Convert.ToString(reader["Datum"]);
                k.datum = k.datum.Substring(0, 11);
                nevsor.Add(k);
            }
            closeConnection();
            return nevsor;
        }

        public string insertKikolcsonozve(kolcson k)
        {
            k.felID = getFelhasznaloID(k.nev);
            openConnection();
            string error = executeInsertCommand("INSERT into Kikolcsonozve (FelhasznaloID, PeldanyID, Datum) values  ('" + k.felID + "', '" + k.konyvID + "', '" + k.datum + "')");
            closeConnection();
            return error;
        }

        public string updateKikolcsonozve(kolcson k)
        {
            k.felID = getFelhasznaloID(k.nev);
            openConnection();
            string error = executeUpdateCommand("update Kikolcsonozve set FelhasznaloID = " + k.felID + ", PeldanyID = " + k.konyvID + " where KolcsonID = " + k.id);
            closeConnection();
            return error;
        }

        public string deleteKikolcsonozve(int id)
        {
            openConnection();
            string error = executeDeleteCommand("delete from Kikolcsonozve where KolcsonID = " + id);
            closeConnection();
            return error;
        }

        public List<string> getFelhasznalok()
        {
            string err = "";
            openConnection();
            SqlDataReader reader = executeReader("select FelhasznaloNev from Felhasznalok ", ref err);
            List<string> nevsor = new List<string>();
            while (reader.Read())
            {
                nevsor.Add(Convert.ToString(reader["FelhasznaloNev"]));
            }
            closeConnection();
            return nevsor;
        }

        public long getFelhasznaloID(string nev)
        {
            string err = "";
            openConnection();
            SqlDataReader reader = executeReader("select FelhasznaloID from Felhasznalok where FelhasznaloNev like '" + nev + "'", ref err);
            long id = -1;
            while (reader.Read())
            {
                id = Convert.ToInt32(reader["FelhasznaloID"]);
            }
            closeConnection();
            return id;
        }

        public List<string> getKonyvek()
        {
            string err = "";
            openConnection();
            SqlDataReader reader = executeReader("select Cim from Konyvek ", ref err);
            List<string> nevsor = new List<string>();
            while (reader.Read())
            {
                nevsor.Add(Convert.ToString(reader["Cim"]));
            }
            closeConnection();
            return nevsor;
        }

        public List<string> getPeldanyok(string konyvCim)
        {
            string err = "";
            openConnection();
            SqlDataReader reader = executeReader("select PeldanyID from Peldany, Konyvek where peldany.KonyvID = Konyvek.KonyvID AND Cim like '" + konyvCim + "'", ref err);
            List<string> nevsor = new List<string>();
            while (reader.Read())
            {
                nevsor.Add(Convert.ToString(reader["PeldanyID"]));
            }
            closeConnection();
            return nevsor;
        }
    }
}